#include <iostream>
#include <string>
#include <mysql/mysql.h>
#define HOST "127.0.0.1"
#define PORT 3306
#define USER "root"
#define PASSWORD "XyK@71986582"
#define DB "gomoku"
using namespace std;
void MysqlError(string str, MYSQL *mysql)
{
    cout << str << ": " << mysql_error(mysql)<<endl;
    mysql_close(mysql);
    exit(1);
}
int main()
{
    // 初始化mysql句柄
    MYSQL *mysql = mysql_init(nullptr);
    if (mysql == nullptr)
    {
        cout << "mysql_init fail" << endl;
        return -1;
    }
    // 连接数据库
    MYSQL *ml = mysql_real_connect(mysql, HOST, USER, PASSWORD, DB, PORT, nullptr, 0);
    if (ml == nullptr)
        MysqlError("mysql_real_connect fail", mysql);
    // 设置字符集
    int n = mysql_set_character_set(mysql, "utf8");
    if (n != 0)
        MysqlError("mysql_set_character_set fail", mysql);
    // 指定要访问的数据库
    n = mysql_select_db(mysql, DB);
    if (n != 0)
        MysqlError("mysql_select_db fail", mysql);
    // 数据库的增删改
    string sql = "insert stu values(null,'张三',17,99,125,63.5),(null,'李四',17,77,128.5,73.5);";
    string sql2 = "update stu set age = 30 where id = 1;"; 
    string sql3 = "delete from stu where id = 2;";
    string sql4 = "select * from stu;";
    n = mysql_query(mysql, sql4.c_str());
    if (n != 0)
        MysqlError("mysql_query fail", mysql);
    // 数据查询,取到数据集
    MYSQL_RES* res = mysql_store_result(mysql);
    if(res == nullptr)
        MysqlError("mysql_store_result fail",mysql);
    //获取行数（数据条数)
    int row = mysql_num_rows(res);
    //获取列数
    int col = mysql_num_fields(res);
    //遍历数据集
    for(int i=0;i<row;i++)
    {
        MYSQL_ROW ret = mysql_fetch_row(res);
        for(int j =0;j<col;j++)
        {
            cout<<ret[j]<<" ";
        }
        cout<<endl;
    }
    //释放数据集
    mysql_free_result(res);
    //关闭并释放mysql句柄
    mysql_close(mysql);
    return 0;
}
